#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "Key.h"
#include "LED.h"
#include "Timer.h"

u8 KeyNum;
u16 i;
u8 LED1Mode;
u8 LED2Mode;

int main(void)
{
	/*模块初始化*/
	OLED_Init();		//OLED初始化
	Timer_Init();		//定时中断初始化
	Key_Init();			//Key初始化
	LED_Iint();			//LED初始化
		
	/*显示静态字符串*/
	OLED_ShowString(1, 1, "i:");					//1行1列显示字符串i:
	OLED_ShowString(2, 1, "LED1Mode:");		//1行1列显示字符串LED1Mode:
	OLED_ShowString(3, 1, "LED2Mode:");		//1行1列显示字符串LED2Mode:
	
	while(1)
	{
		i++;		//用来检测程序是否阻塞
		
		KeyNum = Key_GetNum();//获取当前键值
		
		if(KeyNum != 0)
		{
			if(KeyNum == 1)
			{
				LED1Mode++;
				LED1Mode %= 5;
				GetLED1_Mode(LED1Mode);
				
			}
			if(KeyNum == 2)
			{
				LED2Mode++;
				LED2Mode %= 5;
				GetLED2_Mode(LED2Mode);
				
			}
		}
		OLED_ShowNum(1, 3, i, 5);					//不断刷新显示i变量
		OLED_ShowNum(2, 10, LED1Mode, 1);	//不断刷新显示LED1Mode变量
		OLED_ShowNum(3, 10, LED2Mode, 1);	//不断刷新显示LED2Mode变量
	}	
}

/**
  * 函    数：TIM2中断函数
  * 参    数：无
  * 返 回 值：无
  * 注意事项：此函数为中断函数，无需调用，中断触发后自动执行
  *           函数名为预留的指定名称，可以从启动文件复制
  *           请确保函数名正确，不能有任何差异，否则中断函数将不能进入
  */
void TIM2_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)		//判断是否是TIM2的更新事件触发的中断
	{
		Key_Tick();																		//Num变量自增，用于测试定时中断
		LED_Tick();																		//清除TIM2更新事件的中断标志位
		TIM_ClearFlag(TIM2, TIM_FLAG_Update);					//中断标志位必须清除
	}																								//否则中断将连续不断地触发，导致主程序卡死
}
